home *** CD-ROM | disk | FTP | other *** search
- ; RI Zoomer
- ; (C)1994 Reflective Images
- ; By Stephen NcNamara
- ; Uses: FX-library
- ; Make sure you have these installed before you try compiling this program.
- ; Demonstrates: Using ZoomXn commands
-
- DEFTYPE.w windh,windw,windwmod,azoom,bzoom,azoom2,azoom3,bzoom3
-
- NoCli
- AMIGA
-
- WBStartup
- WbToScreen 0 ; get Workbench as screen 0
- ShowScreen 0 ; bring it to the front
- ScreensBitMap 0,0 ; get the bitmap
- Use BitMap 0 : BitMapOutput 0
-
- deep.b=Peek.b(Addr BitMap(0)+5) ; get Workbench depth
- If deep<1 Then BeepScreen 0 : End ; if error then end
-
- BitMap 1,320,256,deep ; get a couple of bitmaps
- BitMap 2,320,256,deep
-
- BorderPens 2,1
-
- Use Screen 0
- scrh.l=WBHeight
- scrw.l=WBWidth
-
- MenuTitle 0,0,"Zoomer"
- MenuItem 0,0,0,0," Zoom X2 display ","1"
- MenuItem 0,0,0,1," Zoom X4 display ","2"
- MenuItem 0,0,0,2," Zoom X8 display ","3"
- MenuItem 0,0,0,3,"========================" : MenuState 0,0,3,Off
- MenuItem 0,0,0,4," Program info ","H"
- MenuItem 0,0,0,5," Quit and die ","Q"
- MenuTitle 0,1,"Preferences"
- MenuItem 0,%1,1,0," Coordinates ","C"
-
- SizeLimits 136,64,320,256
- Window 0,487,22,153,64,$1|$2|$4|$8|$10|$20|$40|$200|$400|$1000,"RI Zoom window (X2)",1,2,0
- SetMenu 0
-
- zoom.w=2
- Gosub UpdateWind
-
- ;The main loop!
- Repeat
- ev.l=Event : evw.l=EventWindow ;get events
- If evm=0 ;if our window
- If ev=4 OR ev=2 ;window changed size
- Use BitMap 2 : BitMapOutput 2
- Cls
- Use Window 0 : WCls
- Use BitMap 0 : BitMapOutput 0
- Gosub UpdateWind
- EndIf
- If ev=64 AND GadgetHit=0 AND info ;if close window
- Gosub RemoveInfo ; and info window open
- EndIf
- If ev=256 AND MenuHit=0 ;if menu selected
- oldzoom.w=zoom
- Select ItemHit
- Case 0
- zoom=2 ;change zoom to X2
- Case 1
- zoom=4 ;change zoom to X4
- Case 2
- zoom=8 ;change zoom to X8
- Case 4
- Gosub About ;info window open
- Case 5
- End ;exit program
- End Select
- If oldzoom<>zoom ;if zoom changed
- Use BitMap 2 : BitMapOutput 2
- Cls
- Use Window 0 : WCls
- Gosub UpdateTitle
- Gosub UpdateWind
- EndIf
- EndIf
- If ev=256 AND MenuHit=1
- Select ItemHit
- Case 0
- coords=MenuChecked(0,1,0)
- If coords=0 Then Gosub UpdateTitle
- End Select
- EndIf
- EndIf
-
- Use BitMap 1 : BitMapOutput 1 ;do actual zooming!
- xm.w=SMouseX : ym.w=SMouseY ;get mouse co-ords
- x.w=xm-azoom3 : y.w=ym-bzoom3 ;subtract zoom width/height
- If x<0 Then x=0 ;check for off screen
- If y<0 Then y=0
- If x>scrw-azoom Then x=scrw-azoom
- If y>scrh-bzoom Then y=scrh-bzoom
- Scroll x,y,azoom,bzoom,0,0,0 ;grab the block
- azoom2.w=azoom+8 ;increase to make
- If azoom>320 Then azoom=320 ; sure window will be full
- Select zoom
- Case 2
- ZoomX2 1,2,0,0,azoom2,bzoom ;do X2
- Case 4
- ZoomX4 1,2,0,0,azoom2,bzoom ;do X4
- Case 8
- ZoomX8 1,2,0,0,azoom2,bzoom ;do X8
- End Select
- Use Window 0
- If coords Then WTitle Str$(xm)+","+Str$(ym),"RI Zoomer" ;do co-ords
- BitMaptoWindow 2,0,0,0,0,0,windwmod,windh ;copy zoom into window
- VWait
- Until ev=$200 AND evm=0
- End
-
- ;Print some program info
- About:
- If info=1 Then Return
-
- Restore AboutInfo
- Read num.w
- x.w=(WBWidth-320)/2 : y.w=(WBHeight-120)/2
- TextGadget 0,140,113,0,0," Okay "
- Window 1,x,y,320,128,$2,"Program Info",1,2,0
- Activate 1
- For h=1 To num
- Read a$
- WLocate 160-Len(a$)*4,h*8
- NPrint a$
- Next h
-
- Wline 2,110,316,110,1
- If coords=0 Then Gosub UpdateTitle
- info=1
- Return
-
- ;Get rid of info window
- RemoveInfo:
- Free Window 1
- Use Window 0
- Activate 0
- ev=0
- Free GadgetList 0
- info=0
- Return
-
- ;Update zoom windows title
- UpdateTitle:
- If coords=0 Then Use Window 0 : WTitle "RI Zoom Window (X"+Str$(zoom)+")","RI Zoomer"
- Return
-
- ;Change variables used by zoom loop
- ;Adjusts to make sure zoom fill the entire window size
- UpdateWind:
- Use Window 0
- windw.w=InnerWidth
- windh.w=InnerHeight
- windwmod.w=windw-(windw MOD zoom)
- azoom.w=(windw)/zoom
- bzoom.w=(windh)/zoom
- azoom3=azoom ASR 1
- bzoom3=bzoom ASR 1
- Return
-
- ;Text to display
- AboutInfo:
- Data.w 9
- Data$ "RI Zoomer v0.2","","(C) 1994 Reflective Images",""
- Data$ "Written in Blitz Basic 2 by","Stephen McNamara"
- Data$ "","Using the FX library developed","by Reflective Images"
-
-